package com.代理;


import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * @Author weijingchen
 * @Date 2025/6/27 22:03
 * @Version 1.0.0
 */
public class ProxyUtil {
    public static Star createProxy(BigStar bigStar) {
        /*
        *
        * public static Object newProxyInstace(ClassLoader loader, Class<?>[] interfaces, InvocatinoHandler h)
            参数一：用于指定用哪个类加载器，去加载生成的代理类,固定格式
            参数二：指定接口，这些接口用于指定生成的代理长什么，也就是有哪些方法
            参数三：用来指定生成的代理对象要干什么事情
        * */
        Star star = (Star) Proxy.newProxyInstance(
                ProxyUtil.class.getClassLoader(),
                new Class[]{Star.class},
                new InvocationHandler() {
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        /**
                         * 参数一：代理对象
                         * 参数二：被代理对象方法
                         * 参数三：被代理对象方法参数
                         */
                        if ("sing".equals(method.getName())) {
                            System.out.println("准备话筒，收钱");
                        } else if ("dance".equals(method.getName())) {
                            System.out.println("准备场地，收钱");
                        }

                        return method.invoke(bigStar, args);
                    }
                });
        return star;
    }
}
